package com.oracle.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.oracle.Util.ResultData;
import com.oracle.pojo.Book;
import com.oracle.service.IBookService;
import com.oracle.service.impl.BookServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.couchbase.CouchbaseProperties;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController2 {

    @Autowired
    private IBookService bookService;

    @GetMapping
    public ResultData getAll(){
        // 新建一个统一数据格式的工具类对象
        ResultData resultData = new ResultData();
        // 只要是查询操作，就默认flag的值为true
        resultData.setFlag(true);
        // 查询结果
        List<Book> list = bookService.list();
        // 设置data
        resultData.setData(list);
        // 返回 工具类对象
        return resultData;
    }

    @GetMapping("{id}")
    public ResultData getBookById(@PathVariable Integer id){
        return new ResultData(true,bookService.getById(id));
    }

    @PostMapping
    public ResultData insertBook(@RequestBody Book book) throws IOException {
        // 模拟异常出现
        if(book.getName().equals("123")) throw new IOException();
        // 异常出现后，添加失败，flag的值为false
        boolean flag = bookService.save(book);
        // 使用三目运算符返回 统一数据格式的对象
        return new ResultData(flag,flag ? "添加成功^_^" : "添加失败-_-!");
    }

    @DeleteMapping("{id}")
    public ResultData deleteBookById(@PathVariable Integer id){
        return new ResultData(bookService.removeById(id),null);
    }

    @PutMapping
    public ResultData updateBook(@RequestBody Book book){
        return new ResultData(bookService.updateById(book),null);
    }

   /* @GetMapping("{currentPage}/{pageSize}")
    public ResultData getBooksByPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize){
        IPage<Book> pageBook = bookService.getPage(currentPage,pageSize);
        // 当页面中只存在一条数据的时候，删除唯一的一条数据，页面跳转到上一页
        // 如果删除后的currentPage的值大于 总页数pageBook.getPages()的值，那么当前页的值就被赋值为 总页数的值，也就是跳转到删除后刷新数据的最后一页
        if(currentPage > pageBook.getPages()){
            pageBook = bookService.getPage((int)pageBook.getPages(),pageSize);
        }
        // 查询操作，flag的值默认为true
        return new ResultData(true,pageBook);
    }*/
    @GetMapping("{currentPage}/{pageSize}")
    public ResultData getBooksByPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize,Book book){
        IPage<Book> pageBook = bookService.getPage(currentPage,pageSize,book);
        // 当页面中只存在一条数据的时候，删除唯一的一条数据，页面跳转到上一页
        // 如果删除后的currentPage的值大于 总页数pageBook.getPages()的值，那么当前页的值就被赋值为 总页数的值，也就是跳转到删除后刷新数据的最后一页
        if(currentPage > pageBook.getPages()){
            pageBook = bookService.getPage((int)pageBook.getPages(),pageSize,book);
        }
        // 查询操作，flag的值默认为true
        return new ResultData(null != pageBook,pageBook);
    }


}
